In an automated provisioning system, machines are provisioned ‘on demand’. Essentially, a user requests a system be provisioned from a pool of available resource by submitting system requirements; if there is suitable resource available in the pool then this resource is provisioned for them. When the user is finished with the provision, it is de-provisioned and returned to the pool for re-use.
How the overall resources of an IT organization are divided up into pools is a matter of choice, but one common example is to have one pool per development team.
A major factor that introduces delays and decreases the agility of a provisioning system (an important characteristic) is the time taken from a provision request through to the machine being made available to the user. This can be because the initial (and subsequent) install might fail. Factors that could cause a failure include hardware or network failures, so it is often the case that a job failing on one machine does not mean it will fail on the next machine. A current solution is to automatically start another provision after the first one fails, but the problem with this is that it adds considerably to the time taken for the machine to be available to the user.